<?php

class AnswerController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
  public function init() {
		Yii::app()->theme = 'admin';
		$this->layout = "//layouts/answer";
	}

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view','admin','submit'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update','assignother','assign','assignedit','assigneditother'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}
	
	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionAssignOther($id)
	{
		$model = $this->loadModel($id);
		$new = new Answer();
		$new->issueID = $model->issueID;
		$new->thread_number = $model->thread_number;
		$new->resolve_status= 31;
		
		if(isset($_POST['assign']))
		{
			//d($_POST); die;
			if(!isset($_POST['Answer'])) {
				$new->addError('resolver', 'Vui lòng chọn một người giải');
			}
			else {
				$new->resolver = $_POST['Answer']['resolver'];
				if($new->save(false))
					$model->resolve_status =131;
					$model->save(false);
					$this->redirect(array('view','id'=>$new->ID));
			}
		}
		
		
		$this->render('assignother',array(
			'model'=>$model, 'new'=>$new
		));
	}
	
	public function actionAssignEditOther($id)
	{
		$model = $this->loadModel($id);
		$new = new Answer();
		$new->issueID = $model->issueID;
		$new->thread_number = $model->thread_number;
		$new->edit_status = 131;
		
		if(isset($_POST['assign']))
		{
			//d($_POST); die;
			if(!isset($_POST['Answer'])) {
				$new->addError('resolver', 'Vui lòng chọn một người giải');
			}
			else {
				$new->editor = $_POST['Answer']['resolver'];
				if($new->save(false))
				{
					$model->edit_status =49;
					$model->save(false);
					$this->redirect(array('view','id'=>$new->ID));
				}
			}
		}
		
		
		$this->render('assignedit',array(
			'model'=>$model, 'new'=>$new
		));
	}
	
	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionAssign($id)
	{
		$model = $this->loadModel($id);	

		// set resolve_status of answer to "ASSIGNED";
		$model->resolve_status= 31;
		
		if(isset($_POST['assign']))
		{
			//d($_POST); die;
			if(!isset($_POST['Answer'])) {
				$model->addError('resolver', 'Vui lòng chọn một người giải');
			}
			else {
				$model->resolver = $_POST['Answer']['resolver'];
				if($model->save(false))		

					// update resolver status to "BUSY";				
					$user_status = UserStatus::model()->findByAttributes(array('userID'=>$model->resolver));
					if(!empty($user_status))
					{
						$user_status->statusID = 3;
						$user_status->update(false);
					}        
			
					// update or insert assignment record
				  $log =Yii::app()->user->id . " assign " .$model->resolver. "to resolve question ". $model->thread_number. " of issue " .$model->issueID;
				 	Assignment::model()->updateAssignment(	$model->resolver,$model->ID,$log);	

		 			// View after assign to resolver 
					$this->redirect(array('view','id'=>$model->ID));
			}
		}	
		
		$this->render('assign',array(
			'model'=>$model
		));
		
	}
	
	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionAssignEdit($id)
	{
		$model = $this->loadModel($id);	

		// set resolve_status of answer to "ASSIGNED";
		$model->edit_status= 31;
		
		if(isset($_POST['assign']))
		{
			//d($_POST); die;
			if(!isset($_POST['Answer'])) {
				$model->addError('editor', 'Vui lòng chọn một người soạn thảo');
			}
			else {
				$model->editor = $_POST['Answer']['resolver'];
				if($model->save(false))		

					// update resolver status to "BUSY";				
					$user_status = UserStatus::model()->findByAttributes(array('userID'=>$model->editor));
					if(!empty($user_status))
					{
						$user_status->statusID = 3;
						$user_status->update(false);
					}        
			
					// update or insert assignment record
				  $log =Yii::app()->user->id . " assign " .$model->editor. "to edit answer ". $model->thread_number. " of issue " .$model->issueID;
				 	Assignment::model()->updateAssignment(	$model->editor,$model->ID,$log);	

		 			// View after assign to resolver 
					$this->redirect(array('view','id'=>$model->ID));
			}
		}	
				
		$this->render('assignedit',array(
			'model'=>$model
		));		
	}
	

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Answer;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Answer']))
		{
			$model->attributes=$_POST['Answer'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->ID));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Answer']))
		{
			$model->attributes=$_POST['Answer'];
			
			// update resolve_status for answer to "RESOLVED".
			$model->resolve_status =32;
			
			if($model->save())
				$this->redirect(array('view','id'=>$model->ID));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		$this->loadModel($id)->delete();

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Answer');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Answer('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Answer']))
			$model->attributes=$_GET['Answer'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return Answer the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Answer::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
			
	/*	if(Yii::app()->user->id!=$model->resolver)
		{
			throw new CHttpException(403,'Bạn không có quyền truy cập trang này.');
		}*/
		
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param Answer $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='answer-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}	
	public function actionSubmit($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Answer']))
		{
			$model->attributes=$_POST['Answer'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->ID));
		}
		  	      
      // Get image objects
		  $imgs = CUploadedFile::getInstances($model,"image"); 
			$errors = array();
			$list_file = array();
			
			if(!empty($imgs)) {
				foreach ($imgs as $key=>$img) {
					$model->image = CUploadedFile::getInstance($model,"image[$key]");
					$list_file[] = $model->image; 
			    if(!$model->validate()) {
			    	$errors[] = $model->getErrors("image");
			    }
				}
			}		  
			
		if($model->save(false)) {
					if(!empty($imgs)) {
						foreach ($imgs as $img) {
							$file=new File();
							$file->filename = $img->getName();
				    	$file->filesaved = encodeFilename(time().'_'.$img->getName());
				    	$file->filetype = 'image';
				    	$file->folder = 'answers';
				    	$file->save(false);
				    	$img->saveAs('upload/answers/'.$file->filesaved);
							$fileID =  $file->ID;
							$file_issue = new FileIssue();
							$file_issue->answerID = $model->ID;
							$file_issue->fileID = $file->ID; 
							$file_issue->save(false);	
						}
					}
		}
		
		$this->render('submit',array(
			'model'=>$model,
		));
	}
}
